package AlgoritmosGeneticos.model.impl.selecciones;

import java.util.LinkedList;
import java.util.List;

import AlgoritmosGeneticos.model.EstrategiaDeSeleccion;
import AlgoritmosGeneticos.model.Individuo;
import AlgoritmosGeneticos.model.PoblacionSeleccionada;
import AlgoritmosGeneticos.model.impl.PoblacionImpl;
import AlgoritmosGeneticos.model.impl.PoblacionSeleccionadaImpl;

public class Restos implements EstrategiaDeSeleccion{

	public Restos(){
		super();
		System.out.println("Restos");
	}
	
	@Override
	public PoblacionSeleccionada seleccionar(List<Individuo> pob, int k) {
		List<Individuo> resp = new LinkedList<Individuo>();
		double aptitudtotal = 0;
		for (Individuo individuo : pob) {
			aptitudtotal += PoblacionImpl.aptitud(individuo);
		}
		
		for (Individuo individuo : pob) {
			int cantidad = (int) (PoblacionImpl.aptitud(individuo) / aptitudtotal) ;
			for( int i = 0; i < cantidad ; i++){
				resp.add(individuo);
			}
		}
		int individuosQueRestan = k - resp.size();
		EstrategiaDeSeleccion ruleta = new Ruleta();
		PoblacionSeleccionada pobruleta = ruleta.seleccionar(pob, individuosQueRestan);
		PoblacionSeleccionada pobresp = new PoblacionSeleccionadaImpl(resp);
		pobresp.AppendPoblacion(pobruleta);
		return pobresp;
	}
}
